<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of UnidadeMapper
 *
 * @author felipe
 */
class App_Model_UnidadeMapper extends Voitech_Mapper{

    public function __construct(App_Model_Unidade $obUnidade){
        $this->obModel = $obUnidade;
    }

    public function buscarPorId(){
        $rowDbUnidade = App_Model_Db_Unidade::build()->buscar($this->obModel->getCoUnidade());
        if(empty($rowDbUnidade)){
            return;
        }
        $this->carregar($rowDbUnidade);
        return $this;
    }
    
    public function carregar(stdClass $obRow){
        $obResponsavelMapper = new App_Model_ResponsavelMapper(new App_Model_Responsavel());
        $this->obModel->setCoUnidade($obRow->co_unidade)
        			  ->setCoTipoUnidade($obRow->co_tipo_unidade)
                      ->setNoUnidade($obRow->no_unidade)
                      ->setDsEndereco($obRow->ds_endereco)
                      ->setNuTelefone($obRow->nu_telefone)
                      ->setStAtivo($obRow->st_ativo)
                      ->setDtCadastro($obRow->dt_cadastro)
                      ->setExcluir($obRow->excluir)
                      ->setObResponsavel($obResponsavelMapper->carregar($obRow)->getObModel());
        return $this;
    }

     public function cadastrar() {
        $arUnidade = $this->retornarArrayPopulado(); 
        $arUnidade['co_pessoa_cadastro'] = $this->obModel->getObUsuarioCadastro()->getCoPessoa();
        Voitech_Util::validarArray($arUnidade);
        return App_Model_Db_Unidade::build()->insert($arUnidade);                                         
    }
    
    public function alterar(){
        $arUnidade = $this->retornarArrayPopulado(); 
        Voitech_Util::validarArray($arUnidade);
        return App_Model_Db_Unidade::build()->update($arUnidade,App_Model_Db_Unidade::build()->getAdapter()->quoteInto('co_unidade = ?',$this->obModel->getCoUnidade()));                
    }
    
     public function ativar() {
        if($this->obModel->getCoUnidade() == ''){
            throw new Voitech_Exception('Falta cod. Unidade');
        }
        $arUnidade = array('st_ativo'=>'S');       
        return App_Model_Db_Unidade::build()->update($arUnidade,App_Model_Db_Unidade::build()->getAdapter()->quoteInto('co_unidade = ?',$this->obModel->getCoUnidade()));                
    }
    
    public function desativar() {
        if($this->obModel->getCoUnidade() == ''){
            throw new Voitech_Exception('Falta cod. Unidade');
        }
        $arUnidade = array('st_ativo'=>'N');
        return App_Model_Db_Unidade::build()->update($arUnidade
                                                      ,App_Model_Db_Unidade::build()->getAdapter()->quoteInto('co_unidade = ?',$this->obModel->getCoUnidade()));                
    }

    public function  retornarArrayPopulado() {
        $arUnidade = array('no_unidade'=>$this->obModel->getNoUnidade()
        				  ,'co_tipo_unidade'=>$this->obModel->getCoTipoUnidade()
                          ,'co_responsavel'=>$this->obModel->getObResponsavel()->getCoPessoa());
        if($this->obModel->getDsEndereco() != ''){
            $arUnidade['ds_endereco'] = $this->obModel->getDsEndereco();
        }
        if($this->obModel->getNuTelefone() != ''){
            $arUnidade['nu_telefone'] = $this->obModel->getNuTelefone();
        }
        return $arUnidade;
    }

    public function excluir() {
        if($this->obModel->getCoUnidade() == ''){
            throw new Voitech_Exception('Falta cod. Unidade');
        }
        return App_Model_Db_Unidade::build()->delete(App_Model_Db_Unidade::build()->getAdapter()->quoteInto('co_unidade = ?',$this->obModel->getCoUnidade()));                
    }
    
}
